package br.com.intelsys.iflow.driver.struts;

import java.util.List;

import br.com.intelsys.iflow.IFlowGeneric;
import br.com.intelsys.iflow.IFlowInstance;

/**
 * Manipula instancias de processo
 * 
 * Interface padrao
 * 
 * @author Patrick Givisiez
 *
 */

public interface IFlowStruts extends IFlowGeneric {
	
	/**
	 * Cria uma nova instancia baseado em um determinado processo.
	 * 
	 * @param processName Nome do processo
	 * @return Instancia do processo
	 */
	public IFlowInstanceStruts createInstance(String processName);

	/**
	 * Carrega a instancia de um processo previamente criada.
	 * 
	 * @param processName Nome do processo que a instancia faz parte
	 * @param processInstanceId Id do processo
	 * @return Instancia do processo
	 */
	public IFlowInstanceStruts getInstance(String processName, long processInstanceId);
	
	/**
	 * Carrega uma instancia para o Struts a partir de outra instancia.
	 * 
	 * @param processName Nome do processo que a instancia faz parte
	 * @param iFlowInstance Instancia de IFlowInstance.
	 * @return Instancia do processo
	 */
	public IFlowInstanceStruts createInstance(String processName, IFlowInstance iFlowInstance);
	
	/**
	 * Carrega a instancia de um processo previamente criada e localizada em um determinado state.
	 * 
	 * @param processName Nome do processo
	 * @param stateName Nome do state
	 * @return Lista de instancias do processo no state informado
	 */

	public List <IFlowInstanceStruts> getInstanceListByStateName(String processName, String stateName);

	/**
	 * Carrega a instancia de um processo previamente criada e localizada em um determinado state.
	 * 
	 * @param processName Nome do processo
	 * @param stateNameList Lista de states
	 * @return Lista de instancias do processo no state informado
	 */

	public List <IFlowInstanceStruts> getInstanceListByStateName(String processName, List <String> stateNameList);
}